#ifndef SYSTEMCONFIGTABLEMANAGER_H
#define SYSTEMCONFIGTABLEMANAGER_H

#include <QComboBox>
#include <QPointer>
#include <QTableView>
#include <QWidget>
#include "parametertablemodel.h"

class QFileSystemModel;
class QStandardItemModel;
class QModelIndex;
class ParameterTreeModel;
namespace Ui {
class ParameterBrowserWidget;
}
struct CurrentCtx {
    ParamTableKind kind = ParamTableKind::Attenuation;
    int tableId = -1;
    QString typeStr;
    bool valid = false;
};
class ParameterBrowserWidget : public QWidget
{
    Q_OBJECT

public:
    /**
     * @brief ParameterBrowserWidget::ParameterBrowserWidget
     * @details 构造参数浏览器窗口并初始化。
     * @param parent Qt 父窗口。
     */
    explicit ParameterBrowserWidget(QWidget *parent = nullptr);
    /**
     * @brief ParameterBrowserWidget::~ParameterBrowserWidget
     * @details 释放界面资源。
     */
    ~ParameterBrowserWidget();

private slots:
    /**
     * @brief ParameterBrowserWidget::on_btn_addTable_clicked
     * @details 新建或复制参数表。
     */
    void on_btn_addTable_clicked();
    /**
     * @brief ParameterBrowserWidget::on_btn_delTable_clicked
     * @details 删除当前选中的参数表。
     */
    void on_btn_delTable_clicked();
    /**
     * @brief ParameterBrowserWidget::on_btn_save_clicked
     * @details 保存当前表格数据。
     */
    void on_btn_save_clicked();
    /**
     * @brief ParameterBrowserWidget::on_btn_addRow_clicked
     * @details 在当前表格中插入一行。
     */
    void on_btn_addRow_clicked();
    /**
     * @brief ParameterBrowserWidget::on_btn_delRow_clicked
     * @details 删除当前表格的选中行。
     */
    void on_btn_delRow_clicked();
    /**
     * @brief ParameterBrowserWidget::on_btn_outputTable_clicked
     * @details 导出当前表格为 CSV。
     */
    void on_btn_outputTable_clicked();
    /**
     * @brief ParameterBrowserWidget::on_btn_inputTable_clicked
     * @details 从 CSV 导入新表格。
     */
    void on_btn_inputTable_clicked();

    /**
     * @brief ParameterBrowserWidget::renameTreeItem
     * @details 启动树节点重命名。
     */
    void renameTreeItem();
    /**
     * @brief ParameterBrowserWidget::deleteTableRow
     * @details 删除树节点对应行（保留）。
     */
    void deleteTableRow();

    /**
     * @brief ParameterBrowserWidget::onTreeViewPressed
     * @details 处理树节点选中。
     * @param index 当前索引。
     */
    void onTreeViewPressed(const QModelIndex &index);
    /**
     * @brief ParameterBrowserWidget::onParameterTablesChanged
     * @details 数据源更新时刷新树。
     */
    void onParameterTablesChanged();

    /**
     * @brief ParameterBrowserWidget::onTransSourceUnitHeaderChanged
     * @details 换能器源单位下拉框变更。
     * @param index 当前索引。
     */
    void onTransSourceUnitHeaderChanged(int index);
    /**
     * @brief ParameterBrowserWidget::onTransTargetUnitHeaderChanged
     * @details 换能器目标单位下拉框变更。
     * @param index 当前索引。
     */
    void onTransTargetUnitHeaderChanged(int index);

private:
    /**
     * @brief ParameterBrowserWidget::setupModels
     * @details 初始化树模型与表模型。
     */
    void setupModels();
    /**
     * @brief ParameterBrowserWidget::currentModel
     * @details 获取当前显示的表模型。
     * @return 参数表模型指针。
     */
    ParameterTableModel *currentModel() const;
    /**
     * @brief ParameterBrowserWidget::currentView
     * @details 获取当前显示的表格视图。
     * @return 表格视图指针。
     */
    QTableView *currentView() const;
    /**
     * @brief ParameterBrowserWidget::applyCalTwoLineHeader
     * @details 应用校准表双行表头。
     * @param rows 校准数据。
     */
    void applyCalTwoLineHeader(const QList<CalTableConfig> &rows);

    /**
     * @brief ParameterBrowserWidget::setupTransducerHeaderCombos
     * @details 初始化换能器表头的单位下拉框。
     */
    void setupTransducerHeaderCombos();
    /**
     * @brief ParameterBrowserWidget::removeTransducerHeaderCombos
     * @details 移除换能器表头的单位下拉框。
     */
    void removeTransducerHeaderCombos();

private:
    Ui::ParameterBrowserWidget *ui;
    // 模型指针
    QStandardItemModel *m_tableModel; // 表格视图的标准项模型

    // 状态变量
    ParameterTreeModel *m_parameterTreeModel = nullptr;

    ParameterTableModel *m_modelSimple = nullptr;
    ParameterTableModel *m_modelCal = nullptr;
    CurrentCtx m_ctx;

    int m_lastSelectedTableId = -1;      // 用于记录刷新前的表格ID
    QString m_pendingSelectionName = ""; // 用于存储即将被创建的项的名称
    ParamTableKind m_lastSelectedKind;   //用于记录刷新前的表格类型

    QPointer<QComboBox> m_transSourceUnitHeaderCombo; // 源单位 ComboBox
    QPointer<QComboBox> m_transTargetUnitHeaderCombo; // 目标单位 ComboBox
};

#endif // SYSTEMCONFIGTABLEMANAGER_H
